package com.apexsoft.front.common.utils.session;

import javax.servlet.http.HttpServletRequest;

import com.apexsoft.front.common.utils.session.impl.RedisImpl;

/**
 * 缓存工具
 * @author dinglei
 *
 */
public abstract class Cache {
	
//	public static final String SESSION_TYPE_WEB = "WEB"; 
	public static final String SESSION_TYPE_REDIS = "REDIS";
	
	/**
	 * 获取Session对象实例
	 * @param request
	 * @param
	 * @return
	 */
	public static Cache getInstance(HttpServletRequest request){
		return new RedisImpl(request);
	}
	public static Cache getInstance(String sessionId){
		return new RedisImpl(sessionId);
	}
	
	
	/**
	 * 获取session参数
	 * @param key
	 * @return
	 */
	public abstract Object get(String key);
	
	
	
	/**
	 * 设置session参数
	 * @param key
	 * @param value
	 * @param second 超时时间，秒
	 */
	public abstract boolean set(String key,Object value,int second);
	
	/**
	 * 移除
	 * @param key
	 */
	public abstract void remove(String key);
	
	
	/**
	 * 重新设置过期时间
	 * @param key
	 */
	public abstract boolean expire(String key);
	
	/**
	 * 获取剩余的生产时间 单位秒
	 * @param key
	 * @return
	 */
	public abstract long getTTL(String key);
	
	/**
	 * 设置缓存
	 * @param key
	 * @param value
	 */
	public abstract boolean setCache(String key,Object value);
	
	/**
	 * 设置缓存
	 * @param key
	 * @param value
	 * @param second 过期时间；秒
	 */
	public abstract boolean setCache(String key,Object value,int second);
	
	/**
	 * 获取缓存
	 * @param key
	 * @return
	 */
	public abstract Object getCache(String key);
	
	/**
	 * 模糊获取缓存
	 * @param pattern
	 * @return
	 */
	public abstract Object getSetByPattern(String pattern);
	
	/**
	 * 移除缓存
	 * @param key
	 */
	public abstract boolean removeCache(String key);

}
